package fileNoeud;

import arbre.Noeud;
import arbre.NoeudFeuille;

public class ListePrioriteeDeNoeud {

    private CellulePrioriteeDeNoeud tete;

    public ListePrioriteeDeNoeud() {
        tete = new CellulePrioriteeDeNoeud();
    }

    public boolean estVide() {
        return tete.getSuivant() == null;
    }

    public void insererPrioritee(Noeud noeud) {
        CellulePrioriteeDeNoeud parcours = tete;

        while (parcours.getSuivant() != null && noeud.getPrioritee() > parcours.getSuivant().getNoeud().getPrioritee()) {
            parcours = parcours.getSuivant();
        }

        CellulePrioriteeDeNoeud cell = new CellulePrioriteeDeNoeud(noeud, parcours.getSuivant());
        parcours.setSuivant(cell);

    }

    public Noeud supprimerTete() throws NoSuchElementException {
        if (estVide()) {
            throw new NoSuchElementException();
        }

        Noeud noeud = tete.getSuivant().getNoeud();
        tete = tete.getSuivant();
        tete.setNoeud(null);
        return noeud;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        CellulePrioriteeDeNoeud cell = tete.getSuivant();
        while (cell != null) {
            if (cell.getNoeud().estFeuille()) {
                NoeudFeuille nf = (NoeudFeuille) cell.getNoeud();
                sb.append("Contenu : " + nf.getContenu().getContenu());
                sb.append(", ");
                sb.append("Prioritée : " + cell.getNoeud().getPrioritee());
                sb.append("\n");
            }
            cell = cell.getSuivant();
        }
        return sb.toString();
    }
}
